gmtime関数とlocaltime関数は、紀元(1970年1月1日00:00:00 UTC)からの経過秒数を日時情報に変換します。日時情報はtm構造体と呼ぶ構造体のメンバーとして作成します。なお、経過秒数はtime関数で取得することができます。
gmtime関数とlocaltime関数の相違は、gmtime関数は協定世界時(UTC)での時刻へ変換するのに対して、localtime関数はローカル標準時での時刻へ変換します。従って、通常はlocaltime関数を使用して、日本標準時(JST)に変換します。ちなみに、JSTは「UTC+9時間」です。
#include <time.h>
struct tm *gmtime(const time_t *timep);
struct tm *localtime(const time_t *timep);
*timepは紀元からの経過秒数を指定します。
戻り値として、tm構造体のポインタを返します。エラーの場合は、NULLを返します。
tm構造体は<time.h>で定義されており、次のようなメンバーで構成されています。
| メンバー名 | 内容 |
|---|---|
| tm_sec | 秒数で、0から59までの値です。(但し、閏秒のため60までの値は許されます。) |
| tm_min | 分数で、0から59までの値です。 |
| tm_hour | 真夜中からの通算時間で、0から23までの値です。 |
| tm_mday | 月はじめからの日数で、1から31までの値です。 |
| tm_mon | 1月からの通算月数で、0から11までの値です。 |
| tm_year | 1900年からの通算年数です。 |
| tm_wday | 日曜日からの通算日数(曜日)で、0から6までの値です。(0が日曜日です。) |
| tm_yday | 1月1日からの通算日数で、0から365までの値です。 |
| tm_isdst | 夏時間が有効かどうかのフラグです。正の値ならば夏時間は有効になり、0ならば無効、負の値ならばこの情報には意味がないことを表します。 |
プログラム 例
#include <stdio.h>
#include <time.h>
int main()
{
time_t timep;
struct tm *time_inf;
/* 紀元からの経過秒数を得る */
timep = time(NULL);
/* 協定世界時(UTC)へ変換 */
time_inf = gmtime(&timep);
printf('UTC:%s', asctime(time_inf));
/* ローカル標準時へ変換 */
time_inf = localtime(&timep);
printf('JST:%s', asctime(time_inf));
return 0;
}
例の実行結果
$ date 2008年 7月 24日 木曜日 10:42:28 JST $ $ ./localtime.exe UTC:Thu Jul 24 01:42:32 2008 JST:Thu Jul 24 10:42:32 2008 $